// Game类用于控制游戏流程，包括：
// -设置玩家类型
// -玩家下棋
// -判赢
// -轮到下一位玩家
// -记录游戏过程（选做）
// -重新开始游戏

#ifndef GAME_H
#define GAME_H
#include <vector>

#include "board.h"
#include "player.h"

class Game {
   protected:
    Player *player[2];  // 新建2个指向玩家基类的指针
    Board *board;       // 新建棋盘类
    int now = 0;        // 表示当前轮到player[0]或player[1]
    int difficulty;     // 难度

   public:
    Game();                                                // ctor
    ~Game();                                               // dtor
    Game(Board *board, Player *player0, Player *player1);  // 重载ctor
    Game(Board *board);
    std::vector<std::pair<int, int>> history;      // 使用可变大小的vector作历史记录
    int getStatus(int x, int y);                   // 状态getter
    void setStatus(int x, int y, int _status);     // 状态setter
    int rule(int x, int y);                        // 判赢
    Player *getPlayer();                           // 获取当前轮到玩家
    void setPlayer(int num, int type, int order);  // 设置num号玩家类型为type
    void setDifficulty(int i);                     // 难度setter
    int getDifficulty();                           // 难度getter
    void init();
};

#endif  // GAME_H
